package io.renren.common.utils;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期处理
 *
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2016年12月21日 下午12:53:33
 */
public class DateUtils {
    /**
     * 时间格式(yyyy-MM-dd)
     */
    public final static String DATE_PATTERN = "yyyy-MM-dd";
    /**
     * 时间格式(yyyy-MM-dd HH:mm:ss)
     */
    public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static String format(Date date) {
        return format(date, DATE_PATTERN);
    }

    public static String format(Date date, String pattern) {
        if (date != null) {
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            return df.format(date);
        }
        return null;
    }

    /**
     * 计算两个时间相差多少天以每月平均30天计算一个多少个月来减少最小误差
     *
     * @throws ParseException
     */
    public static int dayCompare(Date userdate) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_PATTERN);//设置日期格式
        System.out.println(df.format(new Date()));// new Date()为获取当前系统时间

        Calendar from = Calendar.getInstance();
        from.setTime(userdate);
        Calendar to = Calendar.getInstance();
        String nowday = df.format(new Date());
        to.setTime(df.parse(nowday));
        //获取总天数
        int day = (int) ((to.getTimeInMillis() - from.getTimeInMillis()) / (24 * 3600 * 1000));
        if (day / 30 >= 6) {
            return 6;
        } else if (day % 30 >= 28) {
            return 6;
        }
        return 0;
    }

    /**
     * 计算两个时间相差多少天
     *
     * @throws ParseException
     */
    public static int stringToDate(String str, String str1) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN);//设置日期格式
        return differentDaysByMillisecond(df.parse(str), df.parse(str1));
    }

    /**
     * 计算一个过去时间距离当前多少天
     *
     * @throws ParseException
     */
    public static int stringToDatePast(String str) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN);//设置日期格式
        return differentDaysByMillisecond(df.parse(str), new Date());
    }

    /**
     * 通过时间秒毫秒数判断两个时间的间隔
     *
     * @param date1
     * @param date2
     * @return
     */
    public static int differentDaysByMillisecond(Date date1, Date date2) {
        int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
        return days;
    }

    public static String dataString(String str) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date;
        try {
            date = sdf.parse(str);
        } catch (ParseException e) {
            return str;
        }
        return sdf.format(date);
    }

    /**
     * 将短时间格式时间转换为字符串 yyyy-MM-dd
     *
     * @param dateDate
     * @param k
     * @return
     */
    public static String dateToStr(java.util.Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(dateDate);
        return dateString;
    }

    /**
     * 将短时间格式字符串转换为时间 yyyy-MM-dd
     *
     * @param strDate
     * @return
     */
    public static Date strToDate(String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        ParsePosition pos = new ParsePosition(0);
        Date strtodate = formatter.parse(strDate, pos);
        return strtodate;
    }
}
